header-bar: Track window icon changes
authorAlexander Mikhaylenko <alexm@gnome.org>
Wed, 22 Apr 2020 17:18:12 +0000 (22:18 +0500)
committerAlexander Mikhaylenko <alexm@gnome.org>
Wed, 22 Apr 2020 18:01:12 +0000 (23:01 +0500)
Listen to icon-name changes if it's in a GtkWindow. This allows to remove a
special case for headerbar-as-titlebar from GtkWindow.

gtk/gtkheaderbar.c
gtk/gtkwindow.c

index f34eb68facc2be0c62b7e48dd374555c770b5088..90fc5be4193603bdd2f407a9f229f1859cca5c55 100644 (file)
@@ -992,6 +992,7 @@ static void
 gtk_header_bar_realize (GtkWidget *widget)
 {
   GtkSettings *settings;
+  GtkWidget *root;
 
   GTK_WIDGET_CLASS (gtk_header_bar_parent_class)->realize (widget);
 
@@ -1000,6 +1001,13 @@ gtk_header_bar_realize (GtkWidget *widget)
                             G_CALLBACK (_gtk_header_bar_update_window_buttons), widget);
   g_signal_connect_swapped (gtk_native_get_surface (gtk_widget_get_native (widget)), "notify::state",
                             G_CALLBACK (surface_state_changed), widget);
+
+  root = GTK_WIDGET (gtk_widget_get_root (widget));
+
+  if (GTK_IS_WINDOW (root))
+    g_signal_connect_swapped (root, "notify::icon-name",
+                              G_CALLBACK (_gtk_header_bar_update_window_buttons), widget);
+
   _gtk_header_bar_update_window_buttons (GTK_HEADER_BAR (widget));
 }
 
@@ -1012,6 +1020,7 @@ gtk_header_bar_unrealize (GtkWidget *widget)
 
   g_signal_handlers_disconnect_by_func (settings, _gtk_header_bar_update_window_buttons, widget);
   g_signal_handlers_disconnect_by_func (gtk_native_get_surface (gtk_widget_get_native (widget)), surface_state_changed, widget);
+  g_signal_handlers_disconnect_by_func (gtk_widget_get_root (widget), _gtk_header_bar_update_window_buttons, widget);
 
   GTK_WIDGET_CLASS (gtk_header_bar_parent_class)->unrealize (widget);
 }
index 6793b2a9040f62559ffe67b0c922ab0718363772..a131300ce35cbebe94062bc3615c598ab2042a7d 100644 (file)
@@ -3431,8 +3431,6 @@ gtk_window_realize_icon (GtkWindow *window)
   info->realized = TRUE;
 
   gdk_toplevel_set_icon_list (GDK_TOPLEVEL (priv->surface), icon_list);
-  if (GTK_IS_HEADER_BAR (priv->title_box))
-    _gtk_header_bar_update_window_buttons (GTK_HEADER_BAR (priv->title_box));
 
   if (info->using_themed_icon)
     g_list_free_full (icon_list, g_object_unref);